<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        // 1. 声明
        function add() {
            console.log('hi');
        }
        // 2. 调用
        add();

        // 两数合
        function num(start, end) {
            console.log(start + end);
        }
        num(1, 2);
        num(1, 2, 3); // 无视第三个参数
        num(1); // NaN

        // 带返回值的函数
        function cook(aru) {
            return aru;
        }
        console.log(cook('haha'));

        // arguments的使用 arguments内存储了所有的实参, 只有函数才有arguments对象，且每个函数都有
        /*
            arguments是一个伪数组
            1. 具有数组的length属性
            2. 按照索引的方式进行存储
            3. 没有真正数组的一些方法比如 pop() push() 等
        */
        function fn() {
            console.log(arguments);
            console.log(arguments.length);
            console.log(arguments[1]);
            for (let index = 0; index < arguments.length; index++) {
                console.log(arguments[index]);
            }
        }
        fn(1, 2, 3);

        // 求最大值
        function getMax() {
            var max = arguments[0];
            for (let index = 0; index < arguments.length; index++) {
                if (arguments[index] > max) {
                    max = arguments[index];
                }
            }
            return max
        }
        console.log(getMax(1, 2, 3, 4, 4, 5, 100, 1, 2, 3, 4, 101, 99));

        // 翻转数组
        function reverse(arr) {
            var newArr = [];
            for (var index = arr.length - 1; index >= 0; index--) {
                newArr[newArr.length] = arr[index];
            }
            return newArr;
        }
        console.log(reverse([1, 2, 3, 4, 5]));

        // 函数可以相互调用
        function fn1() {
            console.log(11);
            fn2(); // 在fn1中调用fn2函数
        }
        fn1();

        function fn2() {
            console.log(22);
        }

        // 函数的2中声明方式
        // 1. 利用关键字(命名函数)
        function fn() {

        }
        fn();

        // 2. 函数表达式（匿名函数） var 变量名 = function() {}
        var funcName = function() {
            console.log('函数体');
        }
        funcName();
    </script>

</head>

<body>

</body>

</html>